package core

import (
	_ "embed"
	"strings"
)

var ReplaceSetsGkSpecial = ParseReplaceSets([]string{
	`ά	→	ά
	έ	→	έ
	ή	→	ή
	ί	→	ί
	ΐ	→	ΐ
	ό	→	ό
	ύ	→	ύ
	ΰ	→	ΰ
	ώ	→	ώ
	Ά	→	Ά
	Έ	→	Έ
	Ή	→	Ή
	Ί	→	Ί
	Ό	→	Ό
	Ύ	→	Ύ
	Ώ	→	Ώ`,
})

var ReplaceSetsUpper2Lower = ParseReplaceSets([]string{
	// 拉丁字母
	`A	→	a
	B	→	b
	C	→	c
	D	→	d
	E	→	e
	F	→	f
	G	→	g
	H	→	h
	I	→	i
	J	→	j
	K	→	k
	L	→	l
	M	→	m
	N	→	n
	O	→	o
	P	→	p
	Q	→	q
	R	→	r
	S	→	s
	T	→	t
	U	→	u
	V	→	v
	X	→	x
	Y	→	y
	Z	→	z
	Æ	→	a1
	Œ	→	oi
	Ā	→	a
	Ē	→	e
	Ī	→	i
	Ō	→	o
	Ū	→	u
	Ȳ	→	y
	Ǣ	→	a1
	Ă	→	a
	Ĕ	→	e
	Ĭ	→	i
	Ŏ	→	o
	Ŭ	→	u
	Á	→	a
	É	→	e
	Í	→	i
	Ó	→	o
	Ú	→	u
	Ý	→	y
	Ǽ	→	a1
	Ë	→	ë
	Ï	→	ï
	Ü	→	ü
	Ǖ	→	ü
	Ǘ	→	ü`,

	// 希腊辅音字母
	`Β	→	β
	Γ	→	γ
	Δ	→	δ
	Ζ	→	ζ
	Θ	→	θ
	ϴ	→	θ
	Κ	→	κ
	Λ	→	λ
	Μ	→	μ
	Ν	→	ν
	Ξ	→	ξ
	Π	→	π
	Ρ	→	ρ
	Ῥ	→	ρ
	Σ	→	σ
	Ϲ	→	σ
	Τ	→	τ
	Φ	→	φ
	Χ	→	χ
	Ψ	→	ψ`,

	replace_set_gk_vowel(),
})

//go:embed replace_set_gk_vowel.txt
var _replace_set_gk_vowel string

func replace_set_gk_vowel() string {
	// https://gitee.com/keqinxiaowu/xiaowu/issues/IB2TMK
	// Replace all CRLF with LF
	return strings.ReplaceAll(_replace_set_gk_vowel, "\r\n", "\n")
}

var ReplaceSetsLat = ParseReplaceSets([]string{
	`ﬂ	→	fl
	ﬀ	→	ff
	ﬃ	→	ffi
	ﬄ	→	ffl
	æ	→	a1
	œ	→	oi
	ch	→	c
	kh	→	c
	k	→	c
	th	→	t
	qu	→	qv
	j	→	i
	x	→	cs
	z	→	6d
	ā	→	a
	ē	→	e
	ī	→	i
	ō	→	o
	ū	→	u
	ȳ	→	y
	ǣ	→	a1
	ă	→	a
	ĕ	→	e
	ĭ	→	i
	ŏ	→	o
	ŭ	→	u
	á	→	a
	é	→	e
	í	→	i
	ó	→	o
	ú	→	u
	ý	→	y
	ǽ	→	a1
	ae	→	a1
	oe	→	oi
	ǖ	→	ü
	ǘ	→	ü
	au	→	a5`,
})

var ReplaceSetsGkLat = ParseReplaceSets([]string{
	// 辅音字母
	// 两个辅音字母
	`γκ	→	nc
	γγ	→	ng
	γχ	→	nc
	γξ	→	ncs`,

	// 单个辅音字母
	`β	→	b
	ϐ	→	b
	γ	→	g
	δ	→	d
	ζ	→	6d
	θ	→	t
	ϑ	→	t
	κ	→	c
	ϰ	→	c
	λ	→	l
	μ	→	m
	ν	→	n
	ξ	→	cs
	π	→	p
	ϖ	→	p
	ρ	→	r
	ϱ	→	r
	ῤ	→	r
	ῥ	→	r
	σ	→	s
	ς	→	s
	ϲ	→	s
	τ	→	t
	φ	→	ph
	ϕ	→	ph
	χ	→	c
	ψ	→	ps`,

	// 元音字母
	// 双元音（不带附加符号）
	`αι	→	a1
	ει	→	ei
	οι	→	oi
	υι	→	yi
	αυ	→	a5
	ευ	→	eu
	ου	→	u
	ᾳ	→	ai
	ῃ	→	ei
	ῳ	→	oi
	ηυ	→	eu
	ωυ	→	ou`,

	// 双元音（只带扬音符）
	`αί	→	a1
	εί	→	ei
	οί	→	oi
	υί	→	yi
	αύ	→	a5
	εύ	→	eu
	ού	→	u
	ᾴ	→	ai
	ῄ	→	ei
	ῴ	→	oi
	ηύ	→	eu
	ωύ	→	ou`,

	// 双元音（只带抑音符）
	`αὶ	→	a1
	εὶ	→	ei
	οὶ	→	oi
	υὶ	→	yi
	αὺ	→	a5
	εὺ	→	eu
	οὺ	→	u
	ᾲ	→	ai
	ῂ	→	ei
	ῲ	→	oi
	ηὺ	→	eu
	ωὺ	→	ou`,

	// 双元音（只带扬抑音符）
	`αῖ	→	a1
	εῖ	→	ei
	οῖ	→	oi
	υῖ	→	yi
	αῦ	→	a5
	εῦ	→	eu
	οῦ	→	u
	ᾷ	→	ai
	ῇ	→	ei
	ῷ	→	oi
	ηῦ	→	eu
	ωῦ	→	ou`,

	// 双元音（只带不送气符）
	`αἰ	→	a1
	εἰ	→	ei
	οἰ	→	oi
	υἰ	→	yi
	αὐ	→	a5
	εὐ	→	eu
	οὐ	→	u
	ᾀ	→	ai
	ᾐ	→	ei
	ᾠ	→	oi
	ηὐ	→	eu
	ωὐ	→	ou`,

	// 双元音（只带送气符）
	`αἱ	→	ha1
	εἱ	→	hei
	οἱ	→	hoi
	υἱ	→	hyi
	αὑ	→	ha5
	εὑ	→	heu
	οὑ	→	hu
	ᾁ	→	hai
	ᾑ	→	hei
	ᾡ	→	hoi
	ηὑ	→	heu
	ωὑ	→	hou`,

	// 双元音（带扬音符和不送气符）
	`αἴ	→	a1
	εἴ	→	ei
	οἴ	→	oi
	υἴ	→	yi
	αὔ	→	a5
	εὔ	→	eu
	οὔ	→	u
	ᾄ	→	ai
	ᾔ	→	ei
	ᾤ	→	oi
	ηὔ	→	eu
	ωὔ	→	ou`,

	// 双元音（带抑音符和不送气符）
	`αἲ	→	a1
	εἲ	→	ei
	οἲ	→	oi
	υἲ	→	yi
	αὒ	→	a5
	εὒ	→	eu
	οὒ	→	u
	ᾂ	→	ai
	ᾒ	→	ei
	ᾢ	→	oi
	ηὒ	→	eu
	ωὒ	→	ou`,

	// 双元音（带扬抑音符和不送气符）
	`αἶ	→	a1
	εἶ	→	ei
	οἶ	→	oi
	υἶ	→	yi
	αὖ	→	a5
	εὖ	→	eu
	οὖ	→	u
	ᾆ	→	ai
	ᾖ	→	ei
	ᾦ	→	oi
	ηὖ	→	eu
	ωὖ	→	ou`,

	// 双元音（带扬音符和送气符）
	`αἵ	→	ha1
	εἵ	→	hei
	οἵ	→	hoi
	υἵ	→	hyi
	αὕ	→	ha5
	εὕ	→	heu
	οὕ	→	hu
	ᾅ	→	hai
	ᾕ	→	hei
	ᾥ	→	hoi
	ηὕ	→	heu
	ωὕ	→	hou`,

	// 双元音（带抑音符和送气符）
	`αἳ	→	ha1
	εἳ	→	hei
	οἳ	→	hoi
	υἳ	→	hyi
	αὓ	→	ha5
	εὓ	→	heu
	οὓ	→	hu
	ᾃ	→	hai
	ᾓ	→	hei
	ᾣ	→	hoi
	ηὓ	→	heu
	ωὓ	→	hou`,

	// 双元音（带扬抑音符和送气符）
	`αἷ	→	ha1
	εἷ	→	hei
	οἷ	→	hoi
	υἷ	→	hyi
	αὗ	→	ha5
	εὗ	→	heu
	οὗ	→	hu
	ᾇ	→	hai
	ᾗ	→	hei
	ᾧ	→	hoi
	ηὗ	→	heu
	ωὗ	→	hou`,

	// 词首的ἰῶτα的特殊情况
	// 如果后面不是n,mp,mb,mm，那么词首的以下字母就修改为ï：
	`^ι(?!n|mp|mb|mm)	→	ï
	^ί(?!n|mp|mb|mm)	→	ï
	^ὶ(?!n|mp|mb|mm)	→	ï
	^ῖ(?!n|mp|mb|mm)	→	ï
	^ἰ(?!n|mp|mb|mm)	→	ï
	^ῑ(?!n|mp|mb|mm)	→	ï
	^ῐ(?!n|mp|mb|mm)	→	ï
	^ϊ(?!n|mp|mb|mm)	→	ï
	^ἴ(?!n|mp|mb|mm)	→	ï
	^ἲ(?!n|mp|mb|mm)	→	ï
	^ἶ(?!n|mp|mb|mm)	→	ï
	^ΐ(?!n|mp|mb|mm)	→	ï
	^ῒ(?!n|mp|mb|mm)	→	ï
	^ῗ(?!n|mp|mb|mm)	→	ï`,

	// 单元音（不带附加符号）
	`α	→	a
	ε	→	e
	η	→	e
	ι	→	i
	ο	→	o
	υ	→	y
	ω	→	o`,

	// 单元音（只带长短音符）
	`ᾱ	→	a
	ῑ	→	i
	ῡ	→	y
	ᾰ	→	a
	ῐ	→	i
	ῠ	→	y`,

	// 单元音（只带扬音符）
	`ά	→	a
	έ	→	e
	ή	→	e
	ί	→	i
	ό	→	o
	ύ	→	y
	ώ	→	o`,

	// 单元音（只带抑音符）
	`ὰ	→	a
	ὲ	→	e
	ὴ	→	e
	ὶ	→	i
	ὸ	→	o
	ὺ	→	y
	ὼ	→	o`,

	// 单元音（只带扬抑音符）
	`ᾶ	→	a
	ῆ	→	e
	ῖ	→	i
	ῦ	→	y
	ῶ	→	o`,

	// 单元音（只带气符）
	`ἀ	→	a
	ἐ	→	e
	ἠ	→	e
	ἰ	→	i
	ὀ	→	o
	ὐ	→	y
	ὠ	→	o
	ἁ	→	ha
	ἑ	→	he
	ἡ	→	he
	ἱ	→	hi
	ὁ	→	ho
	ὑ	→	hy
	ὡ	→	ho`,

	// 单元音（只带分音符）
	`ϊ	→	ï
	ϋ	→	ÿ`,

	// 单元音（带扬音符和不送气符）
	`ἄ	→	a
	ἔ	→	e
	ἤ	→	e
	ἴ	→	i
	ὄ	→	o
	ὔ	→	y
	ὤ	→	o`,

	// 单元音（带抑音符和不送气符）
	`ἂ	→	a
	ἒ	→	e
	ἢ	→	e
	ἲ	→	i
	ὂ	→	o
	ὒ	→	y
	ὢ	→	o`,

	// 单元音（带扬抑音符和不送气符）
	`ἆ	→	a
	ἦ	→	e
	ἶ	→	i
	ὖ	→	y
	ὦ	→	o`,

	// 单元音（带扬音符和送气符）
	`ἅ	→	ha
	ἕ	→	he
	ἥ	→	he
	ἵ	→	hi
	ὅ	→	ho
	ὕ	→	hy
	ὥ	→	ho`,

	// 单元音（带抑音符和送气符）
	`ἃ	→	ha
	ἓ	→	he
	ἣ	→	he
	ἳ	→	hi
	ὃ	→	ho
	ὓ	→	hy
	ὣ	→	ho`,

	// 单元音（带扬抑音符和送气符）
	`ἇ	→	ha
	ἧ	→	he
	ἷ	→	hi
	ὗ	→	hy
	ὧ	→	ho`,

	// 单元音（带分音符和重音符）
	`ΐ	→	ï
	ῒ	→	ï
	ῗ	→	ï
	ΰ	→	ÿ
	ῢ	→	ÿ
	ῧ	→	ÿ`,
})

var ReplaceSetsM = ParseReplaceSets([]string{
	// 不可视作为n来转写的m
	// mp
	`pomp	→	po2p
	pump	→	pu2p
	pymp	→	py2p
	bomp	→	bo2p
	bump	→	bu2p
	bymp	→	by2p
	nump	→	nu2p
	nymp	→	ny2p
	mump	→	mu2p
	mymp	→	my2p
	rymp	→	ry2p
	lymp	→	ly2p
	vimp	→	vi2p
	vomp	→	vo2p
	vump	→	vu2p
	vymp	→	vy2p`,
	// mb
	`pomb	→	po2b
	pumb	→	pu2b
	pymb	→	py2b
	bomb	→	bo2b
	bumb	→	bu2b
	bymb	→	by2b
	numb	→	nu2b
	nymb	→	ny2b
	mumb	→	mu2b
	mymb	→	my2b
	rymb	→	ry2b
	lymb	→	ly2b
	vimb	→	vi2b
	vomb	→	vo2b
	vumb	→	vu2b
	vymb	→	vy2b`,
	// mm
	`pomm	→	po2m
	pumm	→	pu2m
	pymm	→	py2m
	bomm	→	bo2m
	bumm	→	bu2m
	bymm	→	by2m
	numm	→	nu2m
	nymm	→	ny2m
	mumm	→	mu2m
	mymm	→	my2m
	rymm	→	ry2m
	lymm	→	ly2m
	vimm	→	vi2m
	vomm	→	vo2m
	vumm	→	vu2m
	vymm	→	vy2m`,

	// 可以视作为n来转写的m（以及ph修改为f）
	`mp	→	np
	mb	→	nb
	mm	→	nm
	ph	→	f`,
})
